package com.atguigu.gmall.item.controller;

import com.atguigu.gmall.common.cache.BloomName;
import com.atguigu.gmall.common.constant.RedisConst;
import com.atguigu.gmall.common.result.Result;
import com.atguigu.gmall.feign.product.SpuFeignClient;
import com.atguigu.gmall.item.service.ItemService;
import com.atguigu.gmall.model.product.SpuInfo;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.redisson.api.RBloomFilter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Map;

/**
 * @author lsj
 * @create 2021-08-10 16:33
 */
@RestController
@RequestMapping("/api/item")
public class SkuInfoController {
    //Consider defining a bean of type
    // 'com.atguigu.gmall.product.SpuFeignClient' in your configuration.

    @Autowired
    SpuFeignClient spuFeignClient;

    @Autowired
    ItemService itemService;

    @Qualifier(BloomName.SKU)
    @Autowired
    RBloomFilter<Object> skufilter;

    //web-all（需要service-item返回的数据）  =====>     service-item（组装后面的数据）  ======>  service-product（4,5个接口）

    /**
     * 获取sku详情信息:  聚合接口
     * @param skuId
     * @return
     */
    @GetMapping("/{skuId}")
    public Result getItem(@PathVariable Long skuId){

        Map<String, Object> skuInfo = itemService.getSkuInfo(skuId);

        //更新热度
        itemService.updateSkuHotScore(skuId);  //秒结束,因为内部采用异步
        //不害怕随机值攻击。
//        String cacheKey = RedisConst.SKUKEY_PREFIX + skuId + RedisConst.SKUKEY_SUFFIX;
//        //布隆说有
//        if (skufilter.contains(cacheKey)) {
//            //itemService 远程调用 service-product 获取到当前商品的所有详情
//            Map<String, Object> skuInfo = itemService.getSkuInfo(skuId);
//
//            return Result.ok(skuInfo);
//        }
        return Result.ok(skuInfo);
    }

//    @GetMapping("/hello")
//    public Result hello(){
//        return Result.ok();
//    }


    //测试远程调用请求
//    @GetMapping("/hello")
//    public Result<Page<SpuInfo>> hello(){
//
//        //feign自动远程调用
//        Result<Page<SpuInfo>> pageResult = spuFeignClient.spuInfoPageList(61L,
//                1L, 5L);
//        return pageResult;
//    }


}
